#!/usr/bin/python
#coding=utf-8
'''
Studio della statistica poissoniana dei conteggi del PMT
---
---
Viene disegnato utilizzando i dati in data/poisson_photodiode/vf_count.root:
    1.  l'andamento dei conteggi;
    2.  l'andamento dei conteggi tra le due forti oscillazioni (tra 140 e 245s);
    3.  l'istogramma dei conteggi tra le due forti oscillazioni (tra 140 e 245s).
---
Vengono fatte due assunzioni:
    1.  la poissoniana viene approssimata da una gaussiana
        (il valore medio è circa 4000);
    2.  i parametri della statistica dei conteggi sono costanti tra 140 e 245s
        (Non è proprio corretto)
'''

from __future__ import division, print_function
from ROOT import TCanvas, TGraph, TTree, TFile, AddressOf, TH1D
from myanalisis import set_my_style, mean, var_est
from val2text import set_sig_digit
import ROOT

'''
Definizione dei parametri e inizializzazione degli oggetti
'''
path_graph = 'report/graph/poisson/'
path_value = 'report/value/poisson/'
ifile = TFile('data/poisson_photodiode/vf_count.root')
tree  = ifile.Get('vf_count')

'''
Creazione dei grafici
'''
set_my_style('e')
graph = TGraph()
graph.SetTitle(';time [s]; Frequenza dei conteggi [Hz]')
hist = TH1D('hist', ';Frequenza dei conteggi [Hz];', 20, 3900, 4400 )
tree.Project('hist', 'count', 'time > 140 && time < 245')
counts = []
for entry in tree:
    n = graph.GetN()
    graph.SetPoint(n, n, entry.count)
    if entry.time > 140 and entry.time < 245:
        counts.append(entry.count)

'''
Calcolo delle meadia e varianza dei conteggi nell'intervallo 140s-245s
'''
m = mean(counts)
with open(path_value + 'mean_isto.dat', 'w') as ofile:
    ofile.write(str(set_sig_digit(m, 4)))

s = var_est(counts)
with open(path_value + 'variance_isto.dat', 'w') as ofile:
    ofile.write(str(set_sig_digit(s, 2)))

'''
Disegna i grafici
'''
canvas_graph = TCanvas('canvas_graph', 'canvas_graph', 2)
graph.SetMaximum(4400)
graph.SetMinimum(3400)
graph.Draw('al')
canvas_graph.SaveAs(path_graph + 'andamento.pdf')
graph.SetMinimum(3900)
graph.GetXaxis().SetLimits(140, 245)
graph.Draw('al')
canvas_graph.SaveAs(path_graph + 'andamento_tra_140s_245s.pdf')
canvas = TCanvas('canvas_dif', 'canvas_dif', 2)
hist.Draw()
canvas.SaveAs(path_graph + 'isto_tra_140s_245s.pdf')
